package self.zhangkang.chart.data

import self.zhangkang.chart.tools.DateTools

/**
 * @author : Android-张康
 * created on: 2023/8/11 17:07
 * description: 股票的K线数据
 */
data class KLineInfo(
    /**
     * 时间。单位 秒
     */
    val date: Long,
    /**
     * 开盘价
     */
    val openPrice: Float,
    /**
     * 收盘价
     */
    val closePrice: Float,
    /**
     * 最高价
     */
    val highPrice: Float,
    /**
     * 最低价
     */
    val lowerPrice: Float,
    /**
     * 涨跌幅
     */
    val upOrDown: Float,
    /**
     * 均价
     */
    val avgPrice: Float,
    /**
     * 价格的 MA
     */
    val priceMA: PriceMA = PriceMA(),
    /**
     * 除权标识
     */
    val adjustFlag: Boolean = false,
    /**
     * 成交额
     */
    val turnVolume: Long,

    /**
     * 成交量 ma5
     */
    val turnoverMa5: Float = 0F,

    /**
     * 成交量 ma10
     */
    val turnoverMa10: Float = 0F,

    /**
     * 成交量
     */
    val volume: Long,

    /**
     * 昨收价
     */
    val preCLosePrice: Float = 0F,

    /**
     * 成交量 MA
     */
    val volumeMA: VolumeMA = VolumeMA(),

    /**
     * MACD 值
     */
    val macd: MACD = MACD(),

    /**
     * KDJ 值
     */
    val kdj: KDJ = KDJ(),

    /**
     * RSI 值
     */
    val rsi: RSI = RSI(),
    /**
     * 资金值
     */
    val zj: ZJ = ZJ(),
    /**
     * CCI 值
     */
    val cci: CCI = CCI(),
    /**
     * WR 值
     */
    val wr: WR = WR(),
    /**
     * BIAS 值
     */
    val bias: BIAS = BIAS(),
    /**
     * 布林值
     */
    val boll: BOLL = BOLL(),
    /**
     * 成本均线
     */
    val cyc: CYC = CYC(),
    /**
     * 标签。用来记录原始的信息
     */
    val dataTag: Any? = null
) {
    /**
     * 记录格式化后的时间
     */
    private var mDataFormat: String = ""

    private var mKLineDate: String = ""

    /**
     * 获取时间戳
     */
    fun getDataTime() = date * 1000

    /**
     * 获取当前的信息
     */
    fun <T> getDataTagByType(): T? {
        return dataTag as? T
    }

    /**
     * 获取格式化后的时间。格式 MM:dd
     */
    fun getDateFormat(): String {
        if (mDataFormat.isEmpty()) {
            mDataFormat = DateTools.toMM_dd(getDataTime())
        }
        return mDataFormat
    }

    /**
     * 获取格式化后的时间。格式 MM:dd
     */
    fun getKLineDate(): String {
        if (mKLineDate.isEmpty()) {
            mKLineDate = DateTools.toyyyy_MM_dd(getDataTime())
        }
        return mKLineDate
    }
}